/*********************************
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
*-- data: 2013-11-10 ------------*
**********************************/

package net.kdh.knieja.kontroler.impl;

import java.util.List;
import net.kdh.knieja.dao.impl.ObslugaArtykulowDaoImpl;
import net.kdh.knieja.dao.interfejsy.ObslugaArtykulowDAO;
import net.kdh.knieja.kontroler.interfejsy.ObslugaArtykulowUsluga;
import net.kdh.knieja.kontroler.narzedzia.Walidator;
import net.kdh.knieja.model.system.Artykul;
import net.kdh.knieja.model.system.token.Token;
import net.kdh.knieja.model.system.token.TokenAdmina;
import net.kdh.knieja.model.system.token.TokenModa;
import net.kdh.knieja.model.wspolne.wyjatki.BladAutoryzacjiWyjatek;
import net.kdh.knieja.model.wspolne.wyjatki.BladWalidacjiWyjatek;
import net.kdh.knieja.model.wspolne.wyjatki.BladWarstwyDaoWyjatek;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class ObslugaArtykulowUslugaImpl implements ObslugaArtykulowUsluga {

    private ObslugaArtykulowDAO obslugaArtykulowDAO;
    private Walidator walidator;

    public ObslugaArtykulowUslugaImpl() {
        obslugaArtykulowDAO = new ObslugaArtykulowDaoImpl();
    }

    @Override
    public String dodajArtykul(Artykul artykul, Token token) throws BladAutoryzacjiWyjatek, BladWalidacjiWyjatek, BladWarstwyDaoWyjatek {
        if (!(token instanceof TokenModa)) {
            throw new BladWalidacjiWyjatek("ObslugaArtykulowUslugaImpl.dodajArtykul()");
        }
        if (!(token instanceof TokenAdmina)) {
            if ((token.getIdUzytkownika() == null ? true : !token.getIdUzytkownika().equals(artykul.getAutor().getIdUzytkownika()))) {
                throw new BladAutoryzacjiWyjatek("ObslugaArtykulowUslugaImpl.dodajArtykul()");
            }
        }
        walidator.weryfikujKlase(token, artykul);
        String idArtykulu = obslugaArtykulowDAO.dodajArtykul(artykul);
        return idArtykulu;
    }

    @Override
    public List<Artykul> pobierzArtykuly(Token token, String... idArtykulow) throws BladAutoryzacjiWyjatek, BladWalidacjiWyjatek, BladWarstwyDaoWyjatek {
        if(!(token instanceof TokenAdmina))
            return obslugaArtykulowDAO.pobierzWidoczneArtykuly(idArtykulow);
        else
            return obslugaArtykulowDAO.pobierzArtykuly(idArtykulow);
    }

    @Override
    public void usunArtykuly(Token token, String... idArtykulow) throws BladAutoryzacjiWyjatek, BladWalidacjiWyjatek, BladWarstwyDaoWyjatek {
        if (!(token instanceof TokenModa)) {
            throw new BladWalidacjiWyjatek("ObslugaArtykulowUslugaImpl.usunArtykuly()\n" + token.toString() + "\n" + token.getClass().toString());
        }
        walidator.weryfikujKlase(token);

        if (token instanceof TokenAdmina) {
            obslugaArtykulowDAO.usunArtykuly(idArtykulow);
        } else {
            obslugaArtykulowDAO.oznaczArtykulyDoUsuniecia(idArtykulow);
        }
    }

    @Override
    public void edytujArtykul(Artykul artykul, Token token) throws BladAutoryzacjiWyjatek, BladWalidacjiWyjatek, BladWarstwyDaoWyjatek {
        if(!(token instanceof TokenModa)) {
            throw new BladWalidacjiWyjatek("ObslugaArtykulowUslugaImpl.edytujArtykul()\n" + token.toString() + "\n" + token.getClass().toString());
        }
        walidator.weryfikujKlase(token, artykul);
        
        obslugaArtykulowDAO.edytujArtykul(artykul);
    }
}
